package com.autoboot.domain;

import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;

import java.util.HashMap;
import java.util.Map;

/**
 * 动态表实体，用于通用表操作
 * @author Maosw
 */
@Data
@Accessors(chain = true)
@EqualsAndHashCode(callSuper = true)
@TableName("sys_user")
public class DynamicEntity extends BaseEntity {

    /**
     * 存储表数据的Map
     */
    @TableField(exist = false)
    private Map<String, Object> dataMap = new HashMap<>();

    /**
     * 设置表字段值
     *
     * @param key 字段名
     * @param value 字段值
     * @return 当前实体对象
     */
    public DynamicEntity put(String key, Object value) {
        dataMap.put(key, value);
        return this;
    }

    /**
     * 批量设置表字段值
     *
     * @param map 字段映射
     * @return 当前实体对象
     */
    public DynamicEntity putAll(Map<String, Object> map) {
        if (map != null) {
            dataMap.putAll(map);
        }
        return this;
    }

    /**
     * 获取表字段值
     *
     * @param key 字段名
     * @return 字段值
     */
    public Object get(String key) {
        return dataMap.get(key);
    }

    /**
     * 将实体转为Map
     *
     * @return 实体数据Map
     */
    public Map<String, Object> toMap() {
        return new HashMap<>(dataMap);
    }

    /**
     * 将实体转为JSONObject
     *
     * @return JSONObject对象
     */
    public JSONObject toJsonObject() {
        return new JSONObject(dataMap);
    }
}
